#ifndef LIBC_STDIO_H
#define LIBC_STDIO_H


#define FOPEN_MAX	10
#define SEEK_END	3
#define SEEK_CUR	2
#define SEEK_SET	1
#define NULL		0

typedef unsigned 	     	 size_t;

typedef struct
{
	
} FILE;

void *stdin;
void *stdout;
void *stderr;


/*
Funzioni per la manipolazione di file
fopen, freopen, fdopen 	Apre un file in lettura o scrittura.
remove 	Rimuove un file.
rename 	Rinomina un file.
rewind 	Agisce come se fosse stata chiamata la funzione fseek(stream, 0L, SEEK_SET) sullo stream passatole; in aggiunta, cancella il suo indicatore d'errore.
tmpfile 	Crea ed apre un file temporaneo, che viene poi cancellato e chiuso con fclose().

Funzioni per la manipolazione dell'input/output
clearerr 	Cancella l'indicatore di fine file e quello d'errore per un dato stream.
feof 	Controlla se l'indicatore di fine file è stato settato per un dato stream.
ferror 	Controlla se l'indicatore d'errore è stato settato per un dato stream.
fflush 	Forza lo svuotamento del buffer output per un dato stream, provocando l'immediata scrittura su file.
fgetpos 	Salva la posizione corrente associata allo stream passato come primo argomento (un FILE *) nel secondo argomento passatole (un fpos_t *).
fgetc 	Restituisce un carattere da un file.
fgets 	Restituisce una stringa presa da un file, terminata da un carattere di nuova riga ('\n') o dal carattere nullo ('\0').
fputc 	Scrive un carattere su un file.
fputs 	Scrive una stringa su un file.
ftell 	Restituisce un indicatore di posizione sul file che può essere passato alla funzione fseek().
fseek 	Si sposta attraverso un file.
fsetpos 	Imposta l'indicatore di posizionamento del file di uno stream associato al primo argomento (un FILE *) come memorizzato nel suo secondo argomento (un fpos_t *).
fread 	Legge da file dei dati di diverse dimensioni.
fwrite 	Scrive su file dei dati di diverse dimensioni.
getc 	Legge e restituisce un carattere dallo stream passatole ed incrementa l'indicatore di posizionamento nel file; è possibile che venga implementato come macro con gli stessi effetti di fgetc(), tranne che potrebbe agire sullo stream più di una volta.
printf, fprintf, sprintf, snprintf 	Utilizzato per stampare vari tipi di dato su stdout.
vprintf 	Anch'essa utilizzata per stampare su stdout.
perror 	Scrive un messaggio di errore su stderr.
putc 	Scrive e restituisce un carattere da uno stream ed incrementa l'indicatore di posizionamento nel file; è possibile che venga implementato come macro, con gli stessi effetti di fputc(), tranne che potrebbe agire sullo stream più di una volta.
vfscanf, vscanf, vsscanf 	Usato per ricevere input da stdin.
setbuf, setvbuf 	Imposta il tipo di buffering per un dato stream.
tmpnam 	Crea un nome di file temporaneo e lo immagazzina nel primo argomento (un char *).
ungetc 	Reinserisce un carattere in uno stream di input.
*/

int fclose(FILE *);
void putchar(char);
void puts(char *);
char *itoa(int);
int atoi(char *);
int printf(const char *, ...);
int scanf(const char *, ...);
int getchar();
char *gets(char *);

#endif
